package com.mkl.system.controller;

import com.mkl.system.common.*;
import com.mkl.system.domain.User;
import com.mkl.system.service.UserService;
import com.mkl.system.vo.UserVo;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;



/**
 * @author king
 * @version 1.0
 * @date 2020/3/11 18:10
 */
@RestController
@RequestMapping("api/user")
public class UserController {
    @Autowired
    private UserService userService;

    /**
     * 查询所有用户
     *
     * @param userVo user
     * @return 返回结果
     */
    @RequestMapping("loadAllUser")
    public Object loadAllUser(UserVo userVo) {
        return userService.loadAllUser(userVo);
    }

    /**
     * 新增用户
     *
     * @param user 用户
     * @return 返回结果
     */
    @RequestMapping("addUser")
    public ResultObj addUser(User user) {
        try {
            user.setSalt(MD5Utils.createUUID());
            user.setPwd(MD5Utils.md5(Constant.DEFAULT_PWD, user.getSalt(), 2));
            user.setAvailable(Constant.AVAILABLE_TRUE);
            user.setType(Constant.USER_TYPE_NORMAL);
            user.setImgpath(Constant.DEFAULT_TITLE_IMAGE);
            userService.saveUser(user);
            return ResultObj.ADD_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.ADD_ERROR;
        }
    }


    /**
     * 查询部门最大的排序码
     */
    @GetMapping("queryUserMaxOrderNum")
    public Object queryUserMaxOrderNum() {
        Integer maxValue = userService.queryUserMaxOrderNum();
        return new DataGridView(maxValue + 1);
    }

    /**
     * 修改用户
     *
     * @param user 用户
     * @return 返回结果
     */
    @PostMapping("updateUser")
    public ResultObj updateUser(User user) {
        try {
            userService.updateUser(user);
            return ResultObj.UPDATE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.UPDATE_ERROR;
        }
    }

    /**
     * 重置用户密码
     *
     * @param id 重置密码
     * @return 返回结果
     */
    @PostMapping("resetUserPwd")
    public ResultObj resetUserPwd(Integer id) {
        try {
            User user = new User();
            user.setId(id);
            user.setSalt(MD5Utils.createUUID());
            user.setPwd(MD5Utils.md5(Constant.DEFAULT_PWD, user.getSalt(), 2));
            userService.updateUser(user);
            return ResultObj.RESET_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.RESET_ERROR;
        }
    }


    /**
     * 根据id删除
     *
     * @param id id
     * @return 返回结果
     */
    @RequestMapping("deleteUser")
    public ResultObj deleteUser(Integer id) {
        try {
            userService.removeById(id);
            return ResultObj.DELETE_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.DELETE_ERROR;
        }
    }

    /**
     * 保存用户和角色之间的关系
     *
     * @param uid  用户id
     * @param rids 角色id
     * @return 返回结果
     */
    @RequestMapping("saveUserRole")
    public ResultObj saveUserRole(Integer uid, Integer[] rids) {
        try {
            userService.saveUserRole(uid, rids);
            return ResultObj.DISPATCH_SUCCESS;
        } catch (Exception e) {
            e.printStackTrace();
            return ResultObj.DISPATCH_ERROR;
        }
    }

    /**
     * 查询当前登陆的用户
     *
     * @return 返回用户
     */
    @GetMapping("getCurrentUser")
    public Object getCurrentUser() {
        ActiveUser activeUser = (ActiveUser) SecurityUtils.getSubject().getPrincipal();
        return new DataGridView(activeUser.getUser());
    }


}
